package com.xudow.app.dynamicstate_old.data.server;

import com.activeshare.edu.ucenter.common.messages.Message;
import com.activeshare.edu.ucenter.common.messages.user.UserDetailMessage;
import com.activeshare.edu.ucenter.models.base.Courses;
import com.activeshare.edu.ucenter.models.course.CourseWithOtherInfo;
import com.activeshare.edu.ucenter.models.user.UserCensus;
import com.xudow.app.Version;
import com.xudow.app.dynamicstate_old.domain.entity.AdvInfo;
import com.xudow.app.dynamicstate_old.domain.entity.AttentionType;
import com.xudow.app.dynamicstate_old.domain.entity.AttentionUser;
import com.xudow.app.dynamicstate_old.domain.entity.Dynamic;
import com.xudow.app.dynamicstate_old.domain.entity.DynamicComment;
import com.xudow.app.dynamicstate_old.domain.entity.DynamicFoward;
import com.xudow.app.dynamicstate_old.domain.entity.DynamicLike;
import com.xudow.app.dynamicstate_old.domain.entity.Grade;
import com.xudow.app.dynamicstate_old.domain.entity.Login;
import com.xudow.app.dynamicstate_old.domain.entity.PushMessage;
import com.xudow.app.dynamicstate_old.domain.entity.RecommendTalent;
import com.xudow.app.dynamicstate_old.domain.entity.Token;
import com.xudow.app.dynamicstate_old.domain.entity.UserCourseWithOtherInfo;
import com.xudow.app.dynamicstate_old.domain.entity.UserInfoVo;
import com.xudow.app.dynamicstate_old.domain.entity.UserIntroduce;
import com.xudow.app.dynamicstate_old.domain.entity.WrapUserIntroduce;

import java.util.List;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import rx.Observable;

public interface ServiceAPI {
    //    String BASE_URL = "http://192.168.31.183:8077/kdd2/";
    String BASE_URL = Version.BASE_URL;

    //    七牛
    @GET("v1/app/dynamic/load_qiniuToken")
    Observable<Token> getQiniuToken();

    //    年级信息
    @GET("v1/app/dynamic/load_grades")
    Observable<List<Grade>> loadGrades();

    //    兴趣列表
    @GET("v1/app/dynamic/list_attentiontype")
    Observable<List<AttentionType>> loadInterest(@Query("gradeIds") String gradeIds);

    //    关注动态
    @GET("v1/app/dynamic/list_attention_dynamic")
    Observable<List<Dynamic>> getDynamics(@Query("limit") int limit,
                                          @Query("time") long time,
                                          @Query("loadtype") int loadtype);

    //    关注动态
    @GET("v1/app/dynamic/list_attention_dynamic")
    Observable<List<Dynamic>> getDynamicsFirst(@Query("limit") int limit);

    //    关注动态
    @GET("v1/app/dynamic/load_dynamic_id")
    Observable<Dynamic> getDynamicsDetail(@Query("id") long id);


    //    登录
    @FormUrlEncoded
    @POST("dologin")
    Observable<Login> login(@Field("username") String username,
                            @Field("password") String password,
                            @Field("tokenUmeng") String tokenUmeng,
                            @Field("phoneType") int phoneType);

    //    获取用户详情
    @GET("app/user/user_detail")
    Observable<UserDetailMessage> getUserInfo();

    //    点赞
    @FormUrlEncoded
    @POST("v1/app/dynamic/submit_like")
    Observable<Integer> like(@Field("dynamic_id") long dynamic_id,
                             @Field("usertype") int usertype);

    //    取消点赞
    @FormUrlEncoded
    @POST("v1/app/dynamic/submit_like_cancel")
    Observable<Integer> unLike(@Field("dynamic_id") long dynamic_id);

    //    点赞列表
    @GET("v1/app/dynamic/list_like")
    Observable<List<DynamicLike>> getLikeList(@Query("dynamic_id") long dynamic_id,
                                              @Query("limit") int limit,
                                              @Query("time") long time,
                                              @Query("loadtype") int loadtype);

    //    点赞列表
    @GET("v1/app/dynamic/list_like")
    Observable<List<DynamicLike>> getLikeListFirst(@Query("dynamic_id") long dynamic_id,
                                                   @Query("limit") int limit);

    //    点赞列表
    @GET("v1/app/dynamic/list_comment")
    Observable<List<DynamicComment>> getDynamicComment(@Query("dynamic_id") long dynamic_id,
                                                       @Query("limit") int limit,
                                                       @Query("time") long time,
                                                       @Query("loadtype") int loadtype);

    //    点赞列表
    @GET("v1/app/dynamic/list_comment")
    Observable<List<DynamicComment>> getDynamicCommentFirst(@Query("dynamic_id") long dynamic_id,
                                                            @Query("limit") int limit);

    //发布新动态
    @FormUrlEncoded
    @POST("v1/app/dynamic/submit_dynamic")
    Observable<Integer> newDynamic(@Field("dynamic") String dynamic,
                                   @Field("attentions") String attentions,
                                   @Field("subjects") String subjects);

    //    发现动态
    @GET("v1/app/dynamic/list_discover_dynamic")
    Observable<List<Dynamic>> discoverDynamics(@Query("limit") int limit,
                                               @Query("time") long time,
                                               @Query("loadtype") int loadtype
//                                               @Query("attentions") String attentions,
//                                               @Query("grades") String grades
    );

    // 发现动态
    @GET("v1/app/dynamic/list_discover_dynamic")
    Observable<List<Dynamic>> discoverDynamicsFirst(@Query("limit") int limit
//                                                    @Query("attentions") String attentions,
//                                                    @Query("grades") String grades
    );

    // 发现动态
    @GET("v1/app/dynamic/list_discover_dynamic")
    Observable<List<Dynamic>> discoverDynamicsFirstNotLogin(@Query("limit") int limit,
                                                            @Query("attentions") String attentions,
                                                            @Query("grades") String grades);

    //    发现动态
    @GET("v1/app/dynamic/list_discover_dynamic")
    Observable<List<Dynamic>> discoverDynamicsNotLogin(@Query("limit") int limit,
                                                       @Query("time") long time,
                                                       @Query("loadtype") int loadtype,
                                                       @Query("attentions") String attentions,
                                                       @Query("grades") String grades);

    //推荐动态
    @GET("v1/app/dynamic/list_recommend_dynamic")
    Observable<List<Dynamic>> recommentDynamicsFirst(@Query("limit") int limit);

    //    推荐动态
    @GET("v1/app/dynamic/list_recommend_dynamic")
    Observable<List<Dynamic>> recommentDynamics(@Query("limit") int limit,
                                                @Query("time") long time,
                                                @Query("loadtype") int loadtype);

    //    推荐达人
    @GET("v1/app/dynamic/list_recommended_talent")
    Observable<List<RecommendTalent>> getRecommentTalent(@Query("p") int page,
                                                         @Query("offset") int offset);

    //    关注他人
    @FormUrlEncoded
    @POST("v1/app/dynamic/submit_attention")
    Observable<Message> attention(@Field("attention_id") long attention_id,
                                  @Field("a_usertype") int a_usertype,//被关注者的用户类型
                                  @Field("u_usertype") int u_usertype);//当前用户的用户类型

    //个人信息
    @GET("v1/app/dynamic/user_introduce")
    Observable<WrapUserIntroduce> getUserIntroduce(@Query("user_profile_id") long user_profile_id);

    @GET("v1/app/dynamic/user_introduce")
    Observable<WrapUserIntroduce> getAgencyInfo(@Query("agency_id") long agency_id);

    //个人信息
    @GET("v1/app/dynamic/user_introduce")
    Call<WrapUserIntroduce> getUserIntroduceLock(@Query("user_profile_id") long user_profile_id);

    @GET("v1/app/dynamic/user_introduce")
    Observable<WrapUserIntroduce> getUserInfo(@Query("user_profile_id") long user_profile_id);


    //个人动态
    @GET("v1/app/dynamic/list_dynamic_userid")
    Observable<List<Dynamic>> getDynamicsFroUserFirst(@Query("user_profile_id") long user_profile_id,
                                                      @Query("limit") int limit);

    //个人动态
    @GET("v1/app/dynamic/list_dynamic_userid")
    Observable<List<Dynamic>> getDynamicsForUser(@Query("user_profile_id") long user_profile_id,
                                                 @Query("limit") int limit,
                                                 @Query("time") long time,
                                                 @Query("loadtype") int loadtype);

    //个人课程
    @GET("app/course/send_list_course")
    Observable<List<UserCourseWithOtherInfo>> getCourseForUser(@Query("userprileid") long user_profile_id,
                                                               @Query("page") int p,
                                                               @Query("offset") int offset);

    @GET("app/course/my_list_course")
    Observable<List<UserCourseWithOtherInfo>> getCourseForUser(@Query("offset") int offset,
                                                               @Query("page") int page);

    //    优选课程
    @GET("v1/app/dynamic/list_preferred_cource")
    Observable<List<Courses>> getRecommentCourse(@Query("p") int p,
                                                 @Query("offset") int offset,
                                                 @Query("latitude") double latitude,
                                                 @Query("longitude") double longitude);

    //    仅自己可看
    @FormUrlEncoded
    @POST("v1/app/dynamic/update_dynamic_authority")
    Observable<Message> setDynamicPrivate(@Field("dynamic_id") long dynamic_id);

    //    删除
    @FormUrlEncoded
    @POST("v1/app/dynamic/delete_dynamic")
    Observable<Message> deleteDynamic(@Field("dynamic_id") long dynamic_id);

    //    取消关注
    @FormUrlEncoded
    @POST("v1/app/dynamic/cancel_attention")
    Observable<Message> unattention(@Field("user_profile_id") long user_profile_id);

    //    收藏
    @POST("v1/app/dynamic/submit_collection")
    @FormUrlEncoded
    Observable<Integer> collectDynamic(@Field("dynamic_id") long dynamic_id);

    //    取消收藏
    @POST("v1/app/dynamic/cancel_collection")
    @FormUrlEncoded
    Observable<Integer> unCollectDynamic(@Field("dynamic_id") long dynamic_id);

    //    评论
    @POST("v1/app/dynamic/submit_comment")
    @FormUrlEncoded
    Observable<Integer> commentDynamic(@Field("dynamic_comment") String dynamic_comment);

    //    转发动态
    @POST("v1/app/dynamic/repeat_dynamic")
    @FormUrlEncoded
    Observable<Integer> forwardDynamic(@Field("dynamic") String dynamicJson, @Field("dynamicId") long dynamicId);

    //    提交用户信息
    @POST("v1/app/dynamic/submit_user_attentioninfos")
    @FormUrlEncoded
    Observable<Integer> submitUserAttention(
            @Field("grades") String grades,
            @Field("attentions") String attentions
    );

    @GET("v1/app/dynamic/list_forward")
    Observable<List<DynamicFoward>> forwardList(
            @Query("dynamic_id") long dynamic_id,
            @Query("limit") int limit);


    //    拉黑
    @POST("v1/app/dynamic/defriend_user")
    @FormUrlEncoded
    Observable<Integer> defriendUser(@Field("user_profile_id") long user_profile_id);

    //    关注列表
    @GET("v1/app/dynamic/list_attentions")
    Observable<List<AttentionUser>> getAttentionUser(@Query("userProfileId") long userProfileId,
                                                     @Query("limit") int limit,
                                                     @Query("time") long time,
                                                     @Query("loadtype") int loadtype);

    //    关注列表
    @GET("v1/app/dynamic/list_attentions")
    Observable<List<AttentionUser>> getAttentionUser(@Query("userProfileId") long userProfileId,
                                                     @Query("limit") int limit);

    //    粉丝列表
    @GET("v1/app/dynamic/list_funs")
    Observable<List<AttentionUser>> getFans(@Query("userProfileId") long userProfileId,
                                            @Query("limit") int limit,
                                            @Query("time") long time,
                                            @Query("loadtype") int loadtype);

    //    粉丝列表
    @GET("v1/app/dynamic/list_funs")
    Observable<List<AttentionUser>> getFans(@Query("userProfileId") long userProfileId,
                                            @Query("limit") int limit);


    //    搜索用户
    @GET("v1/app/dynamic/list_user_nickname")
    Observable<List<UserInfoVo>> searchUser(@Query("nickname") String nickname,
                                            @Query("p") int page,
                                            @Query("offset") int limit
    );


    //    搜索动态
    @GET("v1/app/dynamic/list_dynamic_content")
    Observable<List<Dynamic>> searchDynamic(@Query("content") String content,
                                            @Query("time") long time,
                                            @Query("loadtype") int loadtype,
                                            @Query("limit") int limit
    );


    //    改头像
    @Multipart
    @POST("app/me/upload_portrait")
    Observable<String> changeAvatar(@Part("description") RequestBody description,
                                    @Part MultipartBody.Part coverphoto);

    //    改背景
    @FormUrlEncoded
    @POST("v1/app/dynamic/upload_coverphoto")
    Observable<String> changeCover(@Field("coverphoto") String coverphoto);

    //    举报
    @POST("v1/app/dynamic/submit_report")
    @FormUrlEncoded
    Observable<Message> report(@Field("report") String report);

    //    上传资料
    @POST("v1/app/dynamic/upload_photo_certificate")
    @FormUrlEncoded
    Observable<Message> uploadCertificate(@Field("latestphoto") String latestphoto,
                                          @Field("certificate") String certificate,
                                          @Field("usertype") int usertype);

    //    改备注
    @FormUrlEncoded
    @POST("v1/app/dynamic/submit_user_remark")
    Observable<Integer> submitUserRemark(
            @Field("userId") long userId,
            @Field("remarkName") String remarkName);

    @GET("v1/app/dynamic/list_comment_message")
    Observable<List<PushMessage>> getMsgList(@Query("time") long time,
                                             @Query("loadtype") int loadtype,
                                             @Query("limit") int limit);

    @POST("v1/app/dynamic/delete_message_id")
    @FormUrlEncoded
    Observable<Message> delMsg(@Field("id") long pid);

    //收藏动态列表
    @GET("v1/app/dynamic/list_collection_dynamic")
    Observable<List<Dynamic>> getCollectDynamics(@Query("limit") int limit,
                                                 @Query("time") long time,
                                                 @Query("loadtype") int loadtype);

    //    删除评论
    @POST("v1/app/dynamic/delete_comment")
    @FormUrlEncoded
    Observable<Message> deleteComment(@Field("dynamic_id") long dynamic_id,
                                      @Field("dynamic_comment_id") long dynamic_comment_id);

    //    系统消息
    @GET("v1/app/dynamic/list_user_message")
    Observable<List<PushMessage>> getSystemMsgs(@Query("time") long time,
                                                @Query("loadtype") int loadtype,
                                                @Query("limit") int limit);

    //    清空系统消息
    @POST("v1/app/dynamic/delete_message_user")
    Observable<Message> clearSystemMessage();

    @POST("v1/app/dynamic/delete_message_all")
    Observable<Message> clearUserMessage();

    //    获取发布范围
    @GET("v1/app/dynamic/list_publish_subjects")
    Observable<List<AttentionType>> getAttentionTypes();

    @GET("app/home/adv_list")
    Observable<List<AdvInfo>> getBanner(@Query("app_page") int app_page);

    @POST("v1/app/dynamic/tag_like_user")
    @FormUrlEncoded
    Observable<Message> tagLike(@Field("user_profile_id") long user_profile_id);

    @POST("v1/app/dynamic/cancel_like_user")
    @FormUrlEncoded
    Observable<Message> unTagLike(@Field("user_profile_id") long user_profile_id);

    //    获取个人动态等数目
    @GET("app/me/user_census_record")
    Observable<UserCensus> getUserRecord(@Query("userprofid") long userprofid);

    //    分享统计
    @GET("app/course/share_course")
    Observable<Message> shareCount(@Query("courseid") long courseid,
                                   @Query("sharedTo") int type);

    //    长文阅读统计
    @POST("v1/app/dynamic/read_article")
    @FormUrlEncoded
    Observable<Message> readArticleCount(@Field("dynamicId") long dynamicId);
}